home *** CD-ROM | disk | FTP | other *** search
- *** amicon.c.orig Sat Oct 1 06:39:00 1994
- --- amicon.c Tue Nov 15 17:03:46 1994
- ***************
- *** 9,14 ****
- --- 9,22 ----
- ** - 24-bit color palette
- ** Modified 19-June-94 by Geert Uytterhoeven
- ** - cursor flashing for better cursor visibility
- + ** Modified 18-August-94 by Jes Sorensen (jds@kom.auc.dk)
- + ** - ECS support. The following screen-modes are included:
- + ** multiscan, multiscan-lace, super72, super72-lace, dblntsc,
- + ** dblpal & euro72.
- + ** I suggest that we remove the old AGA screenmodes, as they are
- + ** non-standard, and some of them doesn't work under ECS.
- + ** Minor cleanup on 15-November-94, first release of the ECS-screenmodes.
- + ** (Jes)
- **
- ** Interface based on the original 'amicon.c' code:
- ** Copyright (C) 1993 Hamish Macdonald and Greg Harp
- ***************
- *** 176,181 ****
- --- 184,191 ----
- ushort diwstrt_v, diwstrt_h; /* display window control */
- ushort diwstop_v, diwstop_h;
- ushort bplcon0; /* display mode */
- + ushort htotal; /* htotal is used to calc the pal-line, */
- + /* though I don't know if it is right. */
-
- ulong fgcol; /* 24-bit text colors */
- ulong bgcol;
- ***************
- *** 195,201 ****
- ushort *coplist2dyn; /* List 2 dynamic component */
- };
-
- -
- /* Geometry structure contains all useful information about given mode.
- *
- * Strictly speaking `scr_max_height' and `scr_max_width' is redundant
- --- 205,210 ----
- ***************
- *** 208,218 ****
- * available, without confusing the poor chipset. OCS modes use only the
- * bplcon0, diwstrt, diwstop, ddfstrt, ddfstop registers (a few others could
- * be used as well). -wjr
- */
- -
- struct geometry {
- char *modename; /* Name this thing */
- ! char isOCS; /* Is it OCS or AGA */
- ushort bplcon0; /* Values for bit plane control register 0 */
- ushort scr_width;
- ushort scr_height;
- --- 217,230 ----
- * available, without confusing the poor chipset. OCS modes use only the
- * bplcon0, diwstrt, diwstop, ddfstrt, ddfstop registers (a few others could
- * be used as well). -wjr
- + *
- + * The code now supports ECS aswell, except for FMODE all control registers
- + * are the same under ECS. A special color-table has to be generated though.
- + * -Jes
- */
- struct geometry {
- char *modename; /* Name this thing */
- ! char isOCS; /* Is it OCS or ECS/AGA */
- ushort bplcon0; /* Values for bit plane control register 0 */
- ushort scr_width;
- ushort scr_height;
- ***************
- *** 264,269 ****
- --- 276,289 ----
- static int do_unblank;
-
- /*
- + * ecs_color_zero is used to keep custom.color[0] for the special ECS color-
- + * table, as custom.color[0] is cleared at vblank interrupts.
- + * -Jes (jds@kom.auc.dk)
- + */
- +
- + static ushort ecs_color_zero;
- +
- + /*
- ** Functions
- */
-
- ***************
- *** 347,352 ****
- --- 367,378 ----
- * Wait(diwstop_h-2, 0xff) to make it work with the additional
- * `get-all-you-can-get-out-of-it' AGA modes. Maybe we should derive the
- * wait position from the HTOTAL value? - G.U.
- + *
- + * The Wait(diwstop_h-2, 0xff) didn't work in Super72 under ECS, instead
- + * I changed it to Wait(htotal-4, 0xff). Dunno whether it works under AGA,
- + * and don't ask my why it works. I'm trying to get some facts on this issue
- + * from Commodore.
- + * -Jes
- */
-
- static __inline__ ushort *
- ***************
- *** 403,415 ****
-
- for (i = 0 ; i < p->scr_depth ; i++) {
- scrmem = ((long)p->bitplane[i]) + offset;
- if (shf)
- scrmem += p->bytes_per_row;
-
- *cop++ = CUSTOM_OFS(bplpt[i]);
- ! *cop++ = (long)scrmem >> 16;
- *cop++ = CUSTOM_OFS(bplpt[i]) + 2;
- ! *cop++ = (long)scrmem;
- }
-
- /* If wrapped frame needed - wait for line then switch bitplXs */
- --- 429,442 ----
-
- for (i = 0 ; i < p->scr_depth ; i++) {
- scrmem = ((long)p->bitplane[i]) + offset;
- +
- if (shf)
- scrmem += p->bytes_per_row;
-
- *cop++ = CUSTOM_OFS(bplpt[i]);
- ! *cop++ = (long)(scrmem) >> 16;
- *cop++ = CUSTOM_OFS(bplpt[i]) + 2;
- ! *cop++ = (long)(scrmem);
- }
-
- /* If wrapped frame needed - wait for line then switch bitplXs */
- ***************
- *** 426,437 ****
- --- 453,483 ----
- while (line > 256) {
- /* Hardware limitation - 8 bit counter */
- /* Wait(diwstop_h-2, 0xff) */
- + if (p->bplcon0 & BPC0_SHRES)
- +
- + /*
- + * htotal-4 is used in SHRES-mode, as diwstop_h-2 doesn't work under ECS.
- + * Does this work under AGA?
- + * -Jes
- + */
- + *cop++ = 0xff00 | ((p->htotal-4) | 1);
- + else
- *cop++ = 0xff00 | ((diwstop_h-2) >> 1) | 0x1;
- +
- *cop++ = 0xfffe;
- /* Wait(0, 0) - make sure we're in the new segment */
- *cop++ = 0x0001;
- *cop++ = 0xfffe;
- line -= 256;
- +
- + /*
- + * Under ECS we have to keep color[0], as it is part of a special color-table.
- + */
- +
- + if (boot_info.bi_amiga.chipset == CS_ECS && p->bplcon0 & BPC0_ECSENA) {
- + *cop++ = 0x0180;
- + *cop++ = ecs_color_zero;
- + }
- }
-
- /* Wait(diwstop_h, line - 1) */
- ***************
- *** 440,446 ****
-
- for (i = 0 ; i < p->scr_depth ; i++) {
- scrmem = (long)p->bitplane[i];
- -
- if (shf)
- scrmem += p->bytes_per_row;
-
- --- 486,491 ----
- ***************
- *** 499,505 ****
- ((hs & 0x000001fe) << 15) | (hs & 0x00000001) |
- ((ve & 0x000000ff) << 8) | ((ve & 0x00000100) >> 7));
- }
- ! }
-
- static void amicon_interrupt(struct intframe *fp, void *data)
- {
- --- 544,551 ----
- ((hs & 0x000001fe) << 15) | (hs & 0x00000001) |
- ((ve & 0x000000ff) << 8) | ((ve & 0x00000100) >> 7));
- }
- ! }
- !
-
- static void amicon_interrupt(struct intframe *fp, void *data)
- {
- ***************
- *** 513,519 ****
- * At least it goes awfully perculiar on my A500 without the following
- * test. Not really in a position to test this hypothesis, so sorry
- * for the slow scrolling, all you flicker-fixed souls
- ! */
-
- if (!(p->bplcon0 & BPC0_LACE) || (custom.vposr & 0x8000)) {
- if (p->scroll_latch || p->cursor_latch)
- --- 559,565 ----
- * At least it goes awfully perculiar on my A500 without the following
- * test. Not really in a position to test this hypothesis, so sorry
- * for the slow scrolling, all you flicker-fixed souls
- ! */
-
- if (!(p->bplcon0 & BPC0_LACE) || (custom.vposr & 0x8000)) {
- if (p->scroll_latch || p->cursor_latch)
- ***************
- *** 555,562 ****
- custom.color[0] = 0;
- custom.bplcon3 = save_bplcon3;
- }
- do_blank = 0;
- ! }
-
- if (do_unblank) {
- custom.dmacon = DMAF_SETCLR | DMAF_RASTER | DMAF_SPRITE;
- --- 601,609 ----
- custom.color[0] = 0;
- custom.bplcon3 = save_bplcon3;
- }
- +
- do_blank = 0;
- ! }
-
- if (do_unblank) {
- custom.dmacon = DMAF_SETCLR | DMAF_RASTER | DMAF_SPRITE;
- ***************
- *** 567,581 ****
- custom.bplcon3 = save_bplcon3 | BPC3_LOCT;
- custom.color[0] = COLOR_LSB(p->bgcol);
- custom.bplcon3 = save_bplcon3;
- ! }
- do_unblank = 0;
- ! }
-
- vblank.done = 1;
- ! }
-
- /* ====================================================================== */
-
-
- /* display_init():
- *
- --- 614,691 ----
- custom.bplcon3 = save_bplcon3 | BPC3_LOCT;
- custom.color[0] = COLOR_LSB(p->bgcol);
- custom.bplcon3 = save_bplcon3;
- ! }
- ! /* color[0] is set to ecs_color_zero under ECS */
- ! if (boot_info.bi_amiga.chipset == CS_ECS && p->bplcon0 & BPC0_ECSENA) {
- ! custom.color[0] = ecs_color_zero;
- ! }
- do_unblank = 0;
- ! }
-
- vblank.done = 1;
- ! }
- !
-
- /* ====================================================================== */
-
- + void build_ecs_colors(ushort color1, ushort color2, ushort color3,
- + ushort color4, ushort *table)
- + {
- + /*
- + * This function calculates the special ECS color-tables needed when running
- + * new screen-modes available under ECS. See the hardware reference manual
- + * 3rd edition for details.
- + * -Jes
- + */
- + ushort t;
- +
- + t = (color1 & 0x0ccc);
- + table[0] = t;
- + table[4] = t;
- + table[8] = t;
- + table[12] = t;
- + t = t >> 2;
- + table[0] = (table[0] | t);
- + table[1] = t;
- + table[2] = t;
- + table[3] = t;
- +
- + t = (color2 & 0x0ccc);
- + table[1] = (table[1] | t);
- + table[5] = t;
- + table[9] = t;
- + table[13] = t;
- + t = t >> 2;
- + table[4] = (table[4] | t);
- + table[5] = (table[5] | t);
- + table[6] = t;
- + table[7] = t;
- +
- + t = (color3 & 0x0ccc);
- + table[2] = (table[2] | t);
- + table[6] = (table[6] | t);
- + table[10] = t;
- + table[14] = t;
- + t = t >> 2;
- + table[8] = (table[8] | t);
- + table[9] = (table[9] | t);
- + table[10] = (table[10] | t);
- + table[11] = t;
- +
- + t = (color4 & 0x0ccc);
- + table[3] = (table[3] | t);
- + table[7] = (table[7] | t);
- + table[11] = (table[11] | t);
- + table[15] = t;
- + t = t >> 2;
- + table[12] = (table[12] | t);
- + table[13] = (table[13] | t);
- + table[14] = (table[14] | t);
- + table[15] = (table[15] | t);
- +
- + }
- +
- + /* ====================================================================== */
-
- /* display_init():
- *
- ***************
- *** 585,592 ****
- static void display_init(struct display *p,
- struct geometry *geom, ushort inverse)
- {
- ! int i;
- ! char *chipptr;
- ushort diwstrt_v, diwstop_v;
- ushort diwstrt_h, diwstop_h;
- ushort diw_min_h, diw_min_v;
- --- 695,703 ----
- static void display_init(struct display *p,
- struct geometry *geom, ushort inverse)
- {
- ! ushort ecs_table[16];
- ! int i;
- ! char *chipptr;
- ushort diwstrt_v, diwstop_v;
- ushort diwstrt_h, diwstop_h;
- ushort diw_min_h, diw_min_v;
- ***************
- *** 616,621 ****
- --- 727,736 ----
- p->fontheight = fontheight;
- p->fontwidth = fontwidth;
- p->bplcon0 = geom->bplcon0 | BPC0_COLOR;
- + p->htotal = geom->htotal;
- +
- + /* htotal was added, as I use it to calc the pal-line. -Jes */
- +
- if (p->scr_depth < 8) {
- p->bplcon0 |= (p->scr_depth << 12);
- }
- ***************
- *** 668,678 ****
- ddfstrt = (diwstrt_h >> 1) - 4;
- ddfstop = ddfstrt + (4 * (p->bytes_per_row>>1)) - 8;
- }
- ! else if (p->bplcon0 & BPC0_SHRES) {
- /* There may be some interaction with FMODE here... -8 is magic. */
- ddfstrt = (diwstrt_h >> 1) - 8;
- ddfstop = ddfstrt + (2 * (p->bytes_per_row>>1)) - 8;
- ! }
- else {
- ddfstrt = (diwstrt_h >> 1) - 8;
- ddfstop = ddfstrt + (8 * (p->bytes_per_row>>1)) - 8;
- --- 783,812 ----
- ddfstrt = (diwstrt_h >> 1) - 4;
- ddfstop = ddfstrt + (4 * (p->bytes_per_row>>1)) - 8;
- }
- ! else if (p->bplcon0 & BPC0_SHRES && boot_info.bi_amiga.chipset == CS_AGA) {
- /* There may be some interaction with FMODE here... -8 is magic. */
- +
- + /*
- + * This shoud be fixed, so it supports all different FMODE's.
- + * FMODE varies the speed with 1,2 & 4 the standard ECS speed.
- + * Someone else has to do it, as I don't have an AGA machine with MMU
- + * available here.
- + *
- + * This particular speed looks like FMODE = 3 to me.
- + * ddfstop should be changed so it depends on FMODE under AGA.
- + * -Jes
- + */
- ddfstrt = (diwstrt_h >> 1) - 8;
- ddfstop = ddfstrt + (2 * (p->bytes_per_row>>1)) - 8;
- ! }
- ! /*
- ! * Normal speed for ECS, should be the same for FMODE = 0
- ! * -Jes
- ! */
- ! else if (p->bplcon0 & BPC0_SHRES && boot_info.bi_amiga.chipset == CS_ECS){
- ! ddfstrt = (diwstrt_h >> 1) - 2;
- ! ddfstop = ddfstrt + (2 * (p->bytes_per_row>>1)) - 8;
- ! }
- else {
- ddfstrt = (diwstrt_h >> 1) - 8;
- ddfstop = ddfstrt + (8 * (p->bytes_per_row>>1)) - 8;
- ***************
- *** 683,689 ****
- else
- cursorheight = p->fontheight;
-
- ! chipptr = amiga_chip_alloc(p->scr_depth*p->plane_size+COP_MEM_REQ+SPR_MEM_REQ+4*(cursorheight-1));
-
- /* locate the bitplanes */
- /* These MUST be 64 bit aligned for full AGA compatibility!! */
- --- 817,823 ----
- else
- cursorheight = p->fontheight;
-
- ! chipptr = amiga_chip_alloc(p->scr_depth*(p->plane_size)+COP_MEM_REQ+SPR_MEM_REQ+4*(cursorheight-1));
-
- /* locate the bitplanes */
- /* These MUST be 64 bit aligned for full AGA compatibility!! */
- ***************
- *** 702,713 ****
-
- /* create the sprite data for the cursor image */
- memset((void *)p->cursor, 0, 8+4*cursorheight);
- ! if (p->bplcon0 & BPC0_ECSENA)
- ! /* AGA cursor is SHIRES */
- for (i = 0; (i < p->fontwidth) && (i < 16); i++)
- cursormask |= 1<<(15-i);
- else
- ! /* OCS cursor is LORES */
- for (i = 0; (i < p->fontwidth/2) && (i < 8); i++)
- cursormask |= 1<<(15-i);
-
- --- 836,850 ----
-
- /* create the sprite data for the cursor image */
- memset((void *)p->cursor, 0, 8+4*cursorheight);
- ! /*
- ! * Only AGA supplies hires sprites.
- ! */
- ! if (p->bplcon0 & BPC0_ECSENA && boot_info.bi_amiga.chipset == CS_AGA)
- ! /* AGA cursor is SHIRES, ECS sprites differ */
- for (i = 0; (i < p->fontwidth) && (i < 16); i++)
- cursormask |= 1<<(15-i);
- else
- ! /* For OCS & ECS sprites are pure LORES 8-< */
- for (i = 0; (i < p->fontwidth/2) && (i < 8); i++)
- cursormask |= 1<<(15-i);
-
- ***************
- *** 758,763 ****
- --- 895,933 ----
- custom.color[17] = COLOR_LSB(p->crsrcol);
- custom.bplcon3 = geom->bplcon3;
- }
- + if (boot_info.bi_amiga.chipset == CS_ECS && p->bplcon0 & BPC0_ECSENA) {
- + /*
- + * Calculation of the special ECS color-tables for planes and sprites
- + * is done in the function build_ecs_table
- + */
- +
- + /*
- + * Calcs a special ECS colortable for the bitplane, and copies it
- + * to the custom registers
- + */
- + build_ecs_colors(COLOR_MSB(p->bgcol), COLOR_MSB(p->fgcol),
- + 0, 0, ecs_table);
- +
- + for (i = 0; i < 8; i++){
- + custom.color[i] = ecs_table[i*2];
- + custom.color[i+8] = ecs_table[i*2+1];
- + }
- +
- + ecs_color_zero = ecs_table[0];
- +
- + /*
- + * Calcs a special ECS colortable for the cursor sprite, and copies it
- + * to the appropriate custom registers
- + */
- + build_ecs_colors(0, COLOR_MSB(p->crsrcol), 0, 0, ecs_table);
- +
- + for (i = 0; i < 16; i++){
- + custom.color[i+16] = ecs_table[i];
- + }
- +
- +
- + }
- +
- if (!(geom->isOCS)) {
- /* Need to set up a bunch more regs */
- /* Assumes that diwstrt is in the (0,0) sector, but stop might not be */
- ***************
- *** 782,789 ****
- custom.vbstop = geom->vbstop;
- custom.hcenter = geom->hcenter;
- custom.beamcon0 = geom->beamcon0;
- ! custom.fmode = geom->fmode;
- !
- /* We could load 8-bit colors here, if we wanted */
- }
-
- --- 952,961 ----
- custom.vbstop = geom->vbstop;
- custom.hcenter = geom->hcenter;
- custom.beamcon0 = geom->beamcon0;
- ! if (boot_info.bi_amiga.chipset == CS_AGA) {
- ! custom.fmode = geom->fmode;
- ! }
- ! /* fmode does NOT! excist under ECS, weird things might happen */
- /* We could load 8-bit colors here, if we wanted */
- }
-
- ***************
- *** 904,909 ****
- --- 1076,1264 ----
- 704, 296,
- 0x5b, 0x18,
- 16 /* WORD aligned */
- + },
- + /* ECS modes, these are real ECS modes */
- + {
- + "multiscan", 0,
- + BPC0_SHRES | BPC0_ECSENA, /* bplcon0 */
- + 640, 480, 1,
- + 640, 480,
- + 0x0041, 0x002c, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- +
- + 0x0072, /* htotal */
- + 0x000a, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0002, /* hbstrt */
- + 0x001c, /* hbstop */
- + 0x020c, /* vtotal */
- + 0x0008, /* vsstrt */
- + 0x0011, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x001c, /* vbstop */
- + 0x0043, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- + },
- + {
- + "multiscan-lace", 0,
- + BPC0_SHRES | BPC0_LACE | BPC0_ECSENA, /* bplcon0 */
- + 640, 960, 1,
- + 640, 960,
- + 0x0041, 0x002c, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- +
- + 0x0072, /* htotal */
- + 0x000a, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0002, /* hbstrt */
- + 0x001c, /* hbstop */
- + 0x020c, /* vtotal */
- + 0x0008, /* vsstrt */
- + 0x0011, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x001c, /* vbstop */
- + 0x0043, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- + },
- + /* Super 72 - 800x300 72Hz noninterlaced mode. */
- + {
- + "super72", 0,
- + BPC0_SHRES | BPC0_ECSENA, /* bplcon0 */
- + 800, 304, 1, /* need rows%8 == 0 */
- + 800, 304, /* (cols too) */
- + 0x0051, 0x0021, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- + 0x0091, /* htotal */
- + 0x000a, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0001, /* hbstrt */
- + 0x001e, /* hbstop */
- + 0x0156, /* vtotal */
- + 0x0009, /* vsstrt */
- + 0x0012, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x001c, /* vbstop */
- + 0x0052, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- + },
- + /* Super 72 lace - 800x600 72Hz interlaced mode. */
- + {
- + "super72-lace", 0,
- + BPC0_SHRES | BPC0_LACE | BPC0_ECSENA, /* bplcon0 */
- + 800, 600, 1, /* need rows%8 == 0 */
- + 800, 600, /* (cols too) */
- + 0x0051, 0x0021, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- + 0x0091, /* htotal */
- + 0x000a, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0001, /* hbstrt */
- + 0x001e, /* hbstop */
- + 0x0150, /* vtotal */
- + 0x0009, /* vsstrt */
- + 0x0012, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x001c, /* vbstop */
- + 0x0052, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- + },
- + /* DblNtsc - 640x400 59Hz noninterlaced mode. */
- + {
- + "dblntsc", 0,
- + BPC0_SHRES | BPC0_ECSENA, /* bplcon0 */
- + 640, 400, 1, /* need rows%8 == 0 */
- + 640, 400, /* (cols too) */
- + 0x0049, 0x0021, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- + 0x0079, /* htotal */
- + 0x0007, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0001, /* hbstrt */
- + 0x001e, /* hbstop */
- + 0x01ec, /* vtotal */
- + 0x0008, /* vsstrt */
- + 0x0010, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x0019, /* vbstop */
- + 0x0046, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- + },
- + /* DblPal - 640x512 52Hz noninterlaced mode. */
- + {
- + "dblpal", 0,
- + BPC0_SHRES | BPC0_ECSENA, /* bplcon0 */
- + 640, 512, 1, /* need rows%8 == 0 */
- + 640, 512, /* (cols too) */
- + 0x0049, 0x0021, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- + 0x0079, /* htotal */
- + 0x0007, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0001, /* hbstrt */
- + 0x001e, /* hbstop */
- + 0x0234, /* vtotal */
- + 0x0008, /* vsstrt */
- + 0x0010, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x0019, /* vbstop */
- + 0x0046, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- + },
- + /* Euro72 - productivity - 640x400 71Hz noninterlaced mode. */
- + {
- + "euro72", 0,
- + BPC0_SHRES | BPC0_ECSENA, /* bplcon0 */
- + 640, 400, 1, /* need rows%8 == 0 */
- + 640, 400, /* (cols too) */
- + 0x0041, 0x0021, /* diwstrt h,v */
- + 64, /* 64-bit aligned */
- + BPC2_KILLEHB, /* bplcon2 */
- + BPC3_PF2OF1 | BPC3_PF2OF0 | BPC3_SPRES1 | BPC3_SPRES0 |
- + BPC3_BRDRBLNK | BPC3_EXTBLKEN, /* bplcon3 */
- + 0x0071, /* htotal */
- + 0x0009, /* hsstrt */
- + 0x0013, /* hsstop */
- + 0x0001, /* hbstrt */
- + 0x001e, /* hbstop */
- + 0x01be, /* vtotal */
- + 0x0008, /* vsstrt */
- + 0x0016, /* vsstop */
- + 0x0000, /* vbstrt */
- + 0x001f, /* vbstop */
- + 0x0041, /* hcenter */
- + BMC0_VARVBEN | BMC0_LOLDIS | BMC0_VARVSYEN |
- + BMC0_VARHSYEN | BMC0_VARBEAMEN | BMC0_BLANKEN, /* beamcon0 */
- + FMODE_BPAGEM | FMODE_BPL32 /* fmode */
- },
- /* AGA modes */
- {
-